package com.zmn.plat.business.interfaces.company;

import com.zmn.common.dto.VtDTO;
import com.zmn.plat.common.dto.company.BaseCompanyDIO;
import com.zmn.plat.common.dto.company.CompanyDRO;
import com.zmn.plat.common.dto.company.CompanyTypeDIO;
import com.zmn.plat.model.entity.company.BaseCompany;
import com.zmn.plat.model.vo.company.BaseCompanyVO;
import com.zmn.plat.model.vo.company.area.BaseCompanyAreaVO;

import java.util.List;

/**
 * @author duanzuocai
 * @version v1.0
 * @since 2018/10/16 15:00
 */
public interface BaseCompanyBService {

    /**
     * 获取啄木鸟总部下所有信息公司（ERP使用）
     * @since 2020/09/29 14:03
     * @auther linfeng
     * @return CompanyDRO
     */
    List<CompanyDRO> listZmnAllInfomationCompany();

    /**
     * 获取啄木鸟总部下所有电器公司（ERP使用）
     * @return CompanyDRO
     * @auther linfeng
     * @since 2020/09/29 14:03
     */
    List<CompanyDRO> listZmnAllElectricCompany();

    /**
     * 分页查询所有公司，最大返回500条
     * @param pageNum
     * @param pageSize
     * @auther linfeng
     * @return VtDTO
     */
    List<VtDTO> listCompanyVtByPage(Integer pageNum, Integer pageSize);

    /**
     * 分页查询所有公司，最大返回500条
     * @param pageNum
     * @param pageSize
     * @auther linfeng
     * @since 2020/09/29 14:03
     * @return CompanyDRO
     */
    List<CompanyDRO> listAllCompanyInfoByPage(Integer pageNum, Integer pageSize);

    /**
     * 根据类型，平台标志查询公司信息 添加上上个月修改为禁用的数据
     * @param types
     * @param plat
     * @param month
     * @auther linfeng
     * @since 2020/09/29 14:03
     * @return CompanyDRO
     */
    List<CompanyDRO> listCompanyByTypesUpdate(List<CompanyTypeDIO> types, Integer plat, Integer month);

    /**
     * 分页查询公司信息
     * @param dio     如果没有传分页参数，默认查1~500条，pagesNumber 必须小于等于500
     * @param staffId 如果需要过滤数据权限就传
     * @auther linfeng
     * @since 2020/09/29 14:03
     * @return CompanyDRO
     */
    List<CompanyDRO> listPageByQuery(BaseCompanyDIO dio, Integer staffId);

    /**
     * 分页查询公司信息
     * @param dio      如果没有传分页参数，默认查1~500条，pagesNumber 必须小于等于500
     * @param staffId  如果需要过滤数据权限就传
     * @auther linfeng
     * @since 2020/09/29 14:03
     * @return VtDTO
     */
    List<VtDTO> listVtPageByQuery(BaseCompanyDIO dio, Integer staffId);

    /**
     * 添加公司（根据PlatEnum配置同步生成组织架构）
     *
     * @param company
     * @return 执行结果：1成功，0失败
     */
    int insertCompanyAndOrgan(BaseCompany company);

    /**
     * 描述: 根据公司区域以及经纬度匹配经纬度是否被覆盖
     *
     * @param baseCompanyAreaList
     *            公司区域集合
     * @param latitude
     * @param longitude
     * @return
     * @auther tanghongjun
     * @since 2020/1/9 17:41
     */
    Boolean checkBylatlngAndBaseCompanyAreaList(List<BaseCompanyAreaVO> baseCompanyAreaList, Double longitude, Double latitude);

    /**
     * 描述: 根据地图范围和经纬度信息找到覆盖该经纬度的数据
     *
     * @param baseCompanyAreaVOList
     *            公司覆盖区域信息
     * @param longitude
     * @param latitude
     * @return 覆盖该经纬度的公司覆盖区域信息
     * @auther tanghongjun
     * @since 2020/2/13 16:06
     */
    List<BaseCompanyAreaVO> findBylatlngAndBaseCompanyAreaList(List<BaseCompanyAreaVO> baseCompanyAreaVOList, Double longitude, Double latitude);

    /**
     * 描述：根据服务商公司查询子公司信息
     * @param  serviceCompanyId
     * @return BaseCompany
     * @auther linfeng
     * @since  2020/9/28 17:41
     */
    BaseCompanyVO getSubCompanyByServiceCompanyId(Integer serviceCompanyId);
}
